perm filename GEOM1[3,BGB] blob sn#116882 filedate 1974-08-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	{⊂C<NF3αGEOMED.λ29P34JUFAI50,0}
C00007 00003	
C00009 00004	{I100,0λ27}	The sweep  flag argument  determines whether triangles  (flag
C00013 ENDMK
C⊗;
{⊂C;<N;F3;αGEOMED.;λ29;P34;JUFA;I50,0;}
⊂3.2	Routines using Euler Primitives.⊃

	Further methods  of  polyhedral construction  can readily  be
coded using the Euler primitives. For example, the routines listed in
Box 3.2  illustrate  the  direct generation  of  simple  prototypical
polyhedra,  as well  as  contruction by  sweeping, cutting,  glueing,
copying and duality.
{|;λ10;JAFA}
BOX 3.2 {JC} ROUTINES USING EULER PRIMITIVES.

   1.	BNEW ←	MKCUBE(DX,DY,DZ);	Create right rectangular prism.
   2.	BNEW ←	MKCYLN(RADIUS,N,DZ);	Create cylinder approximation.
   3.	BNEW ←	MKBALL(RADIUS,M,N);	Create sphere approximation.
   4.	FACE ←	SWEEP(FACE,FLAG);	Make prism on face (or sweep wire).
   5.	FACE ←	ROTCOM(FACE);		Rotation sweep wire face completion.
   6.	PEAK ←	PYRAMID(FV);		Make pyramid on a face (or vertex).
   7.	BODY ←	GLUE(FACE1,FACE2);	Removes face1 and face2.
   8.	BNEW ←	MKCUT(BODY,X,Y,Z);	Divide body at cutting plane.
   9.	QNEW ←	MKCOPY(ENTITY);		Copy an entity.
  10.	BODY ←	FVDUAL(BODY);		Apply face/vertex duality to a body.
{|;λ30;JU;FA}
	The  first  three  routines make  cubic  prisms  as  well  as
polyhedral approximations  to circular cylinders and spheres; or more
accurately, MKCUBE creates  rectangular right prisms,  MKCYLN
creates regular polygonal right  cylinders and MKBALL creates hedrons
faceted  by two N-sided  regular  polar  polygons  and N*(M-1)
trapezoidal polygons  with all  vertices lying  on the  surface of  a
sphere of a given radius.
{I∂20,0;FCJC} FIGURE 3.4  -  Examples of MKCUBE, MKCYLN and MKBALL.{H2;X0.41;FA;
I∂-20,0;⊗34.1;I∂0,∂420;⊗34.2;I∂0,∂420;⊗34.3;
I∂410,110;}MKCUBE Results{I∂0,530;}MKCYLN Results{
I∂0,950;}MKBALL Results{JUFA}
	Although, the implementation of curved edges and curved faces in GEOMED
has always  been <just around the corner>, I  have balked at the idea
because it  would require  additional nodes  connected  to edges  and
faces or it would  require expanding the node size,
which I have  always before taken as  an omen for restarting
from scratch.   There have so  far been four  cold starts: GEOMED I, 1969, was
based on sweep primitives and 
was written in LEAP/SAIL; GEOMED II, 1970, was based on winged edge primitives
and was written SAIL without using LEAP; GEOMED III, 1971, was written SAIL  and
FAIL; GEOMED IV, 1972 to present, is written in FAIL. Future
mythical  GEOMED's  include  export  GEOMED  V,     coded  in  simple
international ALGOL for export;  a big GEOMED  VI,  larger nodes  for
curved object representation of  smooth manifolds rather than
polyhedra;  a small GEOMED  VII coded for  a mini computer;
and finally a 4-D  GEOMED VIII for four dimensional  modeling.

{I∂-50,0;FCJC} FIGURE 3.5  -  Creation of a Solid of Rotation by Sweeping a Wire.{H2;X0.41;FA;
I∂-20,0;⊗35.1;I∂0,∂420;⊗35.2;I∂0,∂420;⊗35.4;
I∂410,150;}Initial Wire{I∂0,510;}After four SWEEPs{
I∂0,950;}After ROTCOM{JUFA}
	The three sweep primitives SWEEP,  ROTCOM and PYRAMID involve
the non-solid Euler polyhedra: wire, lamina and sheets. A lone vertex
body can be swept into a wire, a wire can be closed to form  a lamina
or a  wire can be swept  into a sheet, and  a sheet can be  closed to
form  a solid  polyhedron. Figure 3.5  illustrates the  creation of a
solid by sweeping a wire-face, using  SWEEP(FACE,0), to form a sheet. Figure
3.6 illustrates the creation of  a solid by sweeping a normal face as
well as the use of the GLUE(FACE1,FACE2) primitive to close a torus.
{I∂20,0;FCJC} FIGURE 3.6  -  Sweep and Glue.{H2;X0.41;FA;
I∂-20,0;⊗36.1;I∂0,∂420;⊗36.2;I∂0,∂420;⊗36.3;
I∂410,110;}Initial Face Lamina{I∂0,510;}After twelve SWEEPS{
I∂0,960;}After GLUE{JUFAQ}
{I100,0;λ27;}	The sweep  flag argument  determines whether triangles  (flag
non-zero) or rectangles  (flag zero) are to be formed as the sweep of the
edges of the face. Sweeping out rectangles forms prisms,   sweeping
out triangles forms prismoids. The  PYRAMID routine when applied to a
face  creates a  peak vertex at  the average locus of vertices of  the face and
connects all  the vertices  of the  given  face to  the peak  vertex.
PYRAMID applied to a vertex coerces all the faces of the vertex to be
triangles, the interpretation being  that the given  vertex is to  be
made like a peak of a pyramid. Prismoid sweep and face pyramiding are
illustrated by the  construction of an icosahedron in Figure 3.7; the
icosahedron can be changed into  a dodecahedron by the DUAL  routine.
The  DUAL routine mungs face  nodes into  vertex nodes  and vertex
nodes into  face nodes; the new vertices are placed at the arithmetic
mean of the vertices of  the old faces, consequently the dual  is not
its own inverse since objects tend to shrink.
{I∂15,0;λ7;FCJC} FIGURE 3.7  -  ICOSAHEDRON BY PRISMOID SWEEP AND PYRAMID SWEEP.{H2;X.2051;
I∂-15,0;⊗37.1;I∂0,∂210;⊗37.2;I∂0,∂210;⊗37.3;
I∂0,∂210;⊗37.4;I∂0,∂210;⊗37.5;I∂0,∂210;⊗37.6;JUFA;λ27;I∂170,0;}
	The MKCUT(BODY,X,Y,Z)  primitive  divides a  body at  cutting
plane into as many pieces as necessary. Figure 3.8 illustrates how to
cut a  toroidal  polyhedron into  thirteen  pieces using  only  three
cutting planes, after Figure 63 of (Gardner 61). The action of MKCOPY
should  be obvious -  a new polyhedron is returned that  has the same
topology, geometry and photometry as the given polyhedron.
More routines using Euler primitives could be coded for  particular
applications in architecture, computer animation, mechanical  design, numerical
machine control, assembly diagraming and so on.{I∂20,0;
FCJC} FIGURE 3.8 - THREE CUT TORUS DISSECTION INTO THIRTEEN PARTS.{X0.41,0.39;H2;
I∂-35,0;⊗38.1;I∂0,∂420;⊗38.2;I∂0,∂420;⊗38.3;
I∂300,0;⊗38.4;I∂0,∂420;⊗38.5;I∂0,∂420;⊗38.6;JUFAλ30;}